home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / FWPart.h < prev    next >
Encoding:
Text File  |  1996-09-17  |  20.0 KB  |  579 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWPart.h
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWPART_H
  11. #define FWPART_H
  12.  
  13. #ifndef FWEVENTH_H
  14. #include "FWEventH.h"
  15. #endif
  16.  
  17. #ifndef FWPRTDEF_H
  18. #include "FWPrtDef.h"
  19. #endif
  20.  
  21. #ifndef FWWINDOW_H
  22. #include "FWWindow.h"
  23. #endif
  24.  
  25. #ifndef FWVIEWS_K
  26. #include "FWViews.k"
  27. #endif
  28.  
  29. // ----- Foundation Includes -----
  30.  
  31. #ifndef FWPSTR_H
  32. #include "FWPStr.h"
  33. #endif
  34.  
  35. #ifndef FWTCOLL_H
  36. #include "FWTColl.h"
  37. #endif
  38.  
  39. // ----- OpenDoc Includes -----
  40.  
  41. #ifndef SOM_ODPart_xh
  42. #include <Part.xh>
  43. #endif
  44.  
  45. //========================================================================================
  46. //    Forward Declarations
  47. //========================================================================================
  48.  
  49. class ODFrame;
  50. class ODWindow;
  51. class ODSession;
  52. class ODDraft;
  53.  
  54. class FW_CFrame;
  55. class FW_CSelection;
  56. class FW_CPoint;
  57. class FW_CMenuBar;
  58. class FW_CEventDispatcher;
  59. class FW_CCommand;
  60. class FW_CPrivOrderedCollection;
  61. class FW_CCloneInfo;
  62. class FW_CPullDownMenu;
  63. class FW_CWindow;
  64. class FW_CPresentation;
  65. class FW_CExtensionManager;
  66. class FW_CLinkManager;
  67. class FW_CIdler;
  68. class FW_CSemanticInterface;
  69. class FW_CKind;
  70.  
  71. class FW_CPrintInfo;
  72. class FW_CPresentationCollection;
  73. class FW_CContent;
  74. class FW_CDataInterchange;
  75.  
  76. //========================================================================================
  77. //    class FW_CPart
  78. //========================================================================================
  79.  
  80. class FW_CPart : public FW_MEventHandler
  81. {
  82.     friend class ODFModule_FW_SOMPart;
  83.     friend class FW_CPartPresentationIterator;
  84.     friend class FW_CPartFrameIterator;
  85.     friend class FW_CPartLinkSourceIterator;
  86.     friend class FW_CPartLinkDestIterator;
  87.     friend class FW_CPartKindIterator;
  88.     friend class FW_CIdler;
  89.     
  90. public:
  91.     FW_DECLARE_CLASS
  92.     FW_DECLARE_AUTO(FW_CPart)
  93.  
  94. //----------------------------------------------------------------------------------------
  95. //    Initialization/Destruction
  96. //
  97. public:
  98.     FW_CPart(ODPart* odPart, 
  99.              FW_Instance partInstance, 
  100.              FW_ResourceID partInfoID);
  101.     
  102.     virtual void                 Initialize(Environment *ev, ODStorageUnit* storageUnit, FW_Boolean fromStorage);
  103.     virtual                     ~FW_CPart();
  104.  
  105. //----------------------------------------------------------------------------------------
  106. //    Inherited from FW_MEventHandler
  107. //
  108. public:
  109.     virtual FW_Handled                HandleAdjustMenus(Environment *ev, 
  110.                                         FW_CMenuBar* menuBar,
  111.                                         FW_Boolean hasMenuFocus,
  112.                                         FW_Boolean isRoot);
  113.     virtual FW_Handled                HandleMenu(Environment* ev, 
  114.                                         const FW_CMenuEvent& theMenuEvent);
  115.  
  116. //----------------------------------------------------------------------------------------
  117. //    New API
  118. //
  119. public:    
  120.     //--------------------------------------------------------------------------
  121.     // Methods from ODPart
  122.     ODStorageUnit*                    GetStorageUnit(Environment *ev) const;
  123.  
  124.     virtual void                    Release(Environment *ev);
  125.     virtual void                    ReleaseAll(Environment *ev);
  126.     
  127.     FW_Boolean                        GetPartName(Environment *ev, FW_CString& partName) const;
  128.         // Returns true if the part has a name. Returns false otherwise and partName is
  129.         // then set to the name in the partInfo resource
  130.     
  131.     virtual ODSize                    Purge(Environment *ev, ODSize size);
  132.                                     
  133.     //--------------------------------------------------------------------------
  134.     // Draft
  135.  
  136.     virtual FW_Boolean                IsReadOnly(Environment* ev) const;
  137.     ODDraft*                        GetDraft(Environment* ev) const;
  138.     
  139.     //--------------------------------------------------------------------------
  140.     // Presentation
  141.  
  142.     FW_CPresentation*                RegisterPresentation(Environment *ev, 
  143.                                         ODType presentationType, 
  144.                                         FW_Boolean defaultPresentation,
  145.                                         FW_CSelection* selection = NULL);    // Without view resources
  146.     FW_CPresentation*                RegisterPresentation(Environment *ev, 
  147.                                         ODType presentationType, 
  148.                                         FW_Boolean defaultPresentation,
  149.                                         FW_ResourceID viewResourceID,
  150.                                         FW_ResourceID rootViewResourceID,
  151.                                         FW_CSelection* selection = NULL);    // With view resources
  152.                                         
  153.     virtual FW_CPresentation*        ValidatePresentation(Environment *ev, 
  154.                                         ODFrame* odFrame, 
  155.                                         FW_CPresentation *proposedPresentation) const;
  156.     FW_CPresentation*                FindPresentation(Environment *ev, 
  157.                                         ODTypeToken presentationType) const;
  158.  
  159.     //--------------------------------------------------------------------------
  160.     // Frame 
  161.  
  162.     virtual FW_CFrame*                 NewFrame(Environment *ev,
  163.                                         ODFrame* odFrame, 
  164.                                         FW_CPresentation* presentation,
  165.                                         FW_Boolean fromStorage) = 0;
  166.     
  167.     FW_Boolean                        IsValidDisplayFrame(Environment *ev, 
  168.                                         ODStorageUnitID displayFrameID) const;
  169.     
  170.     FW_Boolean                        HasSelectionFocus(Environment *ev) const;
  171.  
  172.     //--------------------------------------------------------------------------
  173.     // Menus
  174.  
  175.     virtual void                     InstallMenus(Environment *ev, FW_CMenuBar* menuBar);
  176.     virtual    FW_Handled                DoAbout(Environment *ev);
  177.             
  178.     //--------------------------------------------------------------------------
  179.     // Getters/Setters
  180.  
  181.     ODPart*                         GetODPart(Environment *ev) const;
  182.     
  183.     FW_CFrame*                         GetLastActiveFrame(Environment *ev) const;
  184.                                     
  185.     ODFacet*                         GetActiveFacet(Environment *ev) const;
  186.     
  187.     FW_CMenuBar*                     GetMenuBar(Environment *ev) const;
  188.     
  189.     unsigned long                    CountDisplayFrame(Environment *ev) const;
  190.     
  191.     FW_Instance                        GetPartInstance(Environment *ev) const;
  192.     FW_ResourceID                    GetViewAsIconID(Environment *ev) const;
  193.  
  194.     FW_CEventDispatcher*            GetEventDispatcher(Environment *ev) const;
  195.     
  196.     void                            SetPrintInfo(FW_CPrintInfo* printInfo);
  197.     FW_CPrintInfo*                    GetPrintInfo() const;
  198.     virtual void                    PrintInfoChanged(Environment *ev, FW_CPrintInfo* printInfo);
  199.     
  200.     void                            SetAboutString(const FW_CString& string);
  201.  
  202.     //--------------------------------------------------------------------------
  203.     // Change
  204.  
  205.     void                            Changed(Environment *ev);
  206.         
  207.     //--------------------------------------------------------------------------
  208.     // Linking
  209.  
  210.     virtual FW_CLinkManager*         NewLinkManager(Environment* ev);
  211.     FW_CLinkManager*                GetLinkManager(Environment* ev) const;
  212.  
  213.     virtual void                    LinkStatusChanged(Environment *ev, ODFrame* odFrame);
  214.  
  215.     //--------------------------------------------------------------------------
  216.     //    Kind Management
  217.     virtual void                    ExternalizeKinds(Environment *ev, ODTypeList* kindset);
  218.     
  219.     FW_CKind*                        RegisterKind(Environment *ev,
  220.                                         ODValueType kind,
  221.                                         FW_StorageKinds storageKind,
  222.                                         FW_ImportExport importExport);
  223.     FW_CKind*                        RegisterKind(Environment *ev,
  224.                                         ODPlatformType platformType,
  225.                                         ODPlatformTypeSpace typeSpace,
  226.                                         FW_StorageKinds storageKind,
  227.                                         FW_ImportExport importExport);
  228.     
  229.     FW_CKind*                        GetKind(Environment* ev, ODType type) const;
  230.     
  231.     FW_CKind*                        GetSupportedKind(Environment *ev, 
  232.                                         ODStorageUnit *su, 
  233.                                         FW_StorageKinds storageKind) const;
  234.                                     
  235.     FW_CKind*                        GetPartKind(Environment *ev) const;
  236.     FW_CKind*                        GetPreferredKind(Environment *ev) const;
  237.  
  238.     FW_Boolean                        ChangePreferredKind(Environment *ev, FW_CKind* newPreferredKind);
  239.     
  240.     //--------------------------------------------------------------------------
  241.     // Externalize/Internalize Content
  242.  
  243.     virtual FW_CContent*            NewPartContent(Environment* ev) = 0;
  244.     
  245.     virtual void                    ExternalizeContent(Environment *ev,
  246.                                         ODStorageUnit* storageUnit,
  247.                                         FW_CCloneInfo* cloneInfo);
  248.         // Should never have to be overriden. Use your content object instead                            
  249.     virtual FW_Boolean                InternalizeContent(Environment *ev,
  250.                                         ODStorageUnit* storageUnit, 
  251.                                         FW_CCloneInfo* cloneInfo);
  252.         // Should never have to be overridden. Use your content object instead                            
  253.  
  254.     // ----- Cloning -----
  255.     virtual void                    CloneInto(Environment *ev,
  256.                                             ODDraftKey key,
  257.                                             ODStorageUnit* toSU,
  258.                                             ODFrame* scope);
  259.  
  260.     // ----- Content Property Prepping -----
  261.     virtual void                     PrepContentProperty(Environment *ev, 
  262.                                             ODStorageUnit* storageUnit, 
  263.                                             FW_StorageKinds storageKind,
  264.                                             FW_Boolean allSupportedKinds);
  265.         // Should not have to be overriden
  266.     virtual void                     AddAnnotationProperties(Environment *ev, 
  267.                                             ODStorageUnit* storageUnit, 
  268.                                             FW_StorageKinds storageKind);
  269.         // Override AddAnnotationProperties to add other properties/values than the registered one
  270.         
  271.     FW_CContent*                    GetContent(Environment* ev) const;
  272.     FW_CDataInterchange*            GetDataInterchange(Environment* ev) const;
  273.  
  274.     virtual void                    ChangeKind(Environment* ev, ODType kind);
  275.     
  276.     //--------------------------------------------------------------------------
  277.     // View In Window
  278.     ODID                            OpenPartWindow(Environment* ev, FW_CFrame* sourceFrame, ODFacet* sourceFacet);
  279.     
  280.     FW_CFrame*                        GetPartWindowFrame(Environment* ev) const;
  281.     FW_CWindow*                        GetPartWindow(Environment* ev) const;
  282.     
  283.     //--------------------------------------------------------------------------    
  284.     // Extensions
  285.     
  286.     FW_CExtensionManager*             GetExtensionManager(Environment *ev) const;
  287.     
  288.     //--------------------------------------------------------------------------    
  289.     // Scripting
  290.     
  291.     virtual void                    InstallScriptingCallbacks(Environment* ev);
  292.     FW_CSemanticInterface*             GetSemanticInterface(Environment* ev) const;
  293.  
  294.     //--------------------------------------------------------------------------
  295.     //    Optional Factory Methods - Should not have to be overridden under normal circumstances
  296.     virtual FW_CPresentation*        NewPresentation(Environment *ev, 
  297.                                             FW_CSelection* selection,
  298.                                             ODTypeToken presentationType,
  299.                                             FW_ResourceID viewResourceID,
  300.                                             FW_ResourceID rootViewResourceID);
  301.     virtual FW_CDataInterchange*     NewDataInterchange(Environment* ev);
  302.     virtual FW_CEventDispatcher*    NewEventDispatcher(Environment *ev);
  303.     virtual FW_CWindow*             NewDocumentWindow(Environment* ev);
  304.     
  305. //----------------------------------------------------------------------------------------
  306. //    Internal API (you should never have to call them)
  307. //
  308. public:
  309.     virtual void                    PrivSetLastActiveFrame(FW_CFrame* lastActiveFrame);
  310.     void                            PrivEnableMenuBar(Environment *ev, FW_Boolean enable, FW_Boolean appleMenu);
  311.     
  312.     // ----- Presentation Management -----
  313.     FW_CPresentation*                PrivGetPresentation(Environment *ev, ODFrame* odFrame) const;
  314.     void                            PrivAddPresentation(FW_CPresentation* presentation);
  315.     void                            PrivRemovePresentation(FW_CPresentation* presentation);
  316.     
  317.     // ----- Frame Management -----
  318.     void                            PrivDisplayFrameRemoved(Environment *ev, ODFrame* frame, FW_Boolean toStorage);
  319.     
  320.     // ----- Idle Management -----
  321.     void                            PrivCountIdleRegistering(FW_Boolean registering);
  322.     
  323.     // ----- Session Globals -----
  324.     void                            PrivInitGlobals(Environment *ev, ODStorageUnit* storageUnit);
  325.     void                            PrivReleaseGlobals();
  326.                                                 
  327.     //----- Extensions -----    
  328.     void                            PrivSetExtensionManager(FW_CExtensionManager* manager);
  329.     
  330.     //----- Scripting -----    
  331.     void                            PrivSetSemanticInterface(FW_CSemanticInterface* semInt);
  332.  
  333.     void                            PrivSetDirty(Environment *ev, FW_Boolean state);
  334.     void                            PrivNeedPrepping(Environment *ev, FW_Boolean state);
  335.     
  336.     // ----- Preferred Kind -----
  337.     void                            PrivDeterminePreferredKind(Environment* ev, ODStorageUnit* storageUnit);
  338.  
  339.     // ----- View in Window -----
  340.     void                            PrivInvalidateIconizedFrames(Environment *ev);
  341.     
  342.     // ----- Error Notification -----
  343.     void                            PrivShowErrorAlert(Environment* ev, short stringResID, short messageID);
  344.  
  345. //----------------------------------------------------------------------------------------
  346. //    Data members
  347. //
  348. public:
  349.     static unsigned short        fgSessionGlobalsCount;
  350.     
  351.     static ODTypeToken            fgSelectionFocusToken;
  352.     static ODTypeToken            fgMenuFocusToken;
  353.     static ODTypeToken            fgKeyFocusToken;
  354.     static ODTypeToken            fgModalFocusToken;
  355.     static ODTypeToken            fgClipboardFocusToken;
  356.     static ODTypeToken            fgScrollingFocusToken;
  357.     static ODTypeToken            fgMouseFocusToken;
  358.     static ODTypeToken            fgViewAsFrameToken;
  359.     static ODTypeToken            fgViewAsSmallIconToken;
  360.     static ODTypeToken            fgViewAsLargeIconToken;
  361.     static ODTypeToken            fgViewAsThumbnailToken;
  362.     
  363. private:
  364.     ODPart*                        fODPart;
  365.  
  366.     // [HLX] could be globals
  367.     FW_ResourceID                fPartInfoID;            // Part Info resource ID
  368.     FW_ResourceID                fViewAsIconID;            // Default View As Icon ID
  369.     FW_ResourceID                fDocumentWindowID;        // Resource ID for the document window resource
  370.     FW_CString                    fPartUserName;            // user name
  371.     FW_CString                    fAboutString;            // "About PartName..." for menu item
  372.     
  373.     short                        fIdleCount;
  374.     short                        fModalDialogCount;    // number of nested modal dialogs
  375.  
  376.     FW_CMenuBar*                fMenuBar;            // This is the current menubar 
  377.     FW_CFrame*                     fLastActiveFrame;
  378.     FW_TOrderedCollection<FW_CPresentation>* fPresentations;    
  379.     FW_CPresentation*            fDefaultPresentation;
  380.     
  381.     FW_Instance                    fPartInstance;
  382.     FW_CIdler*                    fIdler;                // Idler object attached to the part (NULL if part not registered)
  383.     
  384.     FW_CLinkManager*            fLinkManager;        // NULL if Part doesn't create Links
  385.  
  386.     FW_CEventDispatcher*        fEventDispatcher;    // Event Dispatcher
  387.     
  388.     FW_CExtensionManager*        fExtensionManager;
  389.     
  390.     FW_CSemanticInterface*        fSemanticInterface;
  391.     
  392.     FW_CPrintInfo*                fPrintInfo;            // May be NULL
  393.  
  394.     FW_CContent*                fContent;
  395.     FW_CDataInterchange*        fDataInterchange;    
  396.     
  397.     FW_Boolean                    fNeedPrepping;
  398.     
  399.     FW_TOrderedCollection<FW_CKind>*    fKinds;
  400.     FW_CKind*                    fPartKind;            // cached part kind
  401.     FW_CKind*                    fPreferredKind;        // cached preferred kind
  402.     
  403.     FW_CFrame*                    fPartWindowFrame;
  404. };
  405.  
  406. //========================================================================================
  407. //    Inlines
  408. //========================================================================================
  409.  
  410. //----------------------------------------------------------------------------------------
  411. //    FW_CPart::GetEventDispatcher
  412. //----------------------------------------------------------------------------------------
  413. inline FW_CEventDispatcher* FW_CPart::GetEventDispatcher(Environment*) const
  414. {
  415.     return fEventDispatcher;
  416. }
  417.  
  418. //----------------------------------------------------------------------------------------
  419. //    FW_CPart::GetPartInstance
  420. //----------------------------------------------------------------------------------------
  421. inline FW_Instance FW_CPart::GetPartInstance(Environment*) const
  422. {
  423.     return fPartInstance;
  424. }
  425.  
  426. //----------------------------------------------------------------------------------------
  427. //    FW_CPart::GetViewAsIconID
  428. //----------------------------------------------------------------------------------------
  429. inline FW_ResourceID FW_CPart::GetViewAsIconID(Environment*) const
  430. {
  431.     return fViewAsIconID;
  432. }
  433.  
  434. //----------------------------------------------------------------------------------------
  435. //    FW_CPart::GetStorageUnit
  436. //----------------------------------------------------------------------------------------
  437. inline ODStorageUnit* FW_CPart::GetStorageUnit(Environment *ev) const
  438. {
  439.     return fODPart->GetStorageUnit(ev);
  440. }
  441.  
  442. //----------------------------------------------------------------------------------------
  443. //    FW_CPart::GetLastActiveFrame
  444. //----------------------------------------------------------------------------------------
  445. inline FW_CFrame* FW_CPart::GetLastActiveFrame(Environment*) const
  446. {
  447.     return fLastActiveFrame;
  448. }
  449.  
  450. //----------------------------------------------------------------------------------------
  451. //    FW_CPart::GetMenuBar
  452. //----------------------------------------------------------------------------------------
  453. inline FW_CMenuBar* FW_CPart::GetMenuBar(Environment*) const
  454. {
  455.     return fMenuBar;
  456. }
  457.  
  458. //----------------------------------------------------------------------------------------
  459. //    FW_CPart::GetODPart
  460. //----------------------------------------------------------------------------------------
  461. inline ODPart* FW_CPart::GetODPart(Environment*) const
  462. {
  463.     return fODPart;
  464. }
  465.  
  466. //----------------------------------------------------------------------------------------
  467. //    FW_CPart::PrivSetExtensionManager
  468. //----------------------------------------------------------------------------------------
  469. inline void FW_CPart::PrivSetExtensionManager(FW_CExtensionManager* manager)
  470. {
  471.     fExtensionManager = manager;
  472. }
  473.  
  474. //----------------------------------------------------------------------------------------
  475. //    FW_CPart::GetExtensionManager
  476. //----------------------------------------------------------------------------------------
  477. inline FW_CExtensionManager* FW_CPart::GetExtensionManager(Environment*) const
  478. {
  479.     return fExtensionManager;
  480. }
  481.  
  482. //---------------------------------------------------------------------------------------
  483. //    FW_CPart::GetLinkManager
  484. //----------------------------------------------------------------------------------------
  485. inline FW_CLinkManager* FW_CPart::GetLinkManager(Environment*) const
  486. {
  487.     return fLinkManager;
  488. }
  489.  
  490. //----------------------------------------------------------------------------------------
  491. //    FW_CPart::PrivSetSemanticInterface
  492. //----------------------------------------------------------------------------------------
  493. inline void FW_CPart::PrivSetSemanticInterface(FW_CSemanticInterface* semInt)
  494. {
  495.     fSemanticInterface = semInt;
  496. }
  497.  
  498. //----------------------------------------------------------------------------------------
  499. //    FW_CPart::GetSemanticInterface
  500. //----------------------------------------------------------------------------------------
  501. inline FW_CSemanticInterface* FW_CPart::GetSemanticInterface(Environment*) const
  502. {
  503.     return fSemanticInterface;
  504. }
  505.  
  506. //---------------------------------------------------------------------------------------
  507. //    FW_CPart::GetContent
  508. //----------------------------------------------------------------------------------------
  509. inline FW_CContent* FW_CPart::GetContent(Environment*) const
  510. {
  511.     return fContent;
  512. }
  513.  
  514. //---------------------------------------------------------------------------------------
  515. //    FW_CPart::GetDataInterchange
  516. //----------------------------------------------------------------------------------------
  517. inline FW_CDataInterchange* FW_CPart::GetDataInterchange(Environment*) const
  518. {
  519.     return fDataInterchange;
  520. }
  521.  
  522. //----------------------------------------------------------------------------------------
  523. //    FW_CPart::PrivSetLastActiveFrame
  524. //----------------------------------------------------------------------------------------
  525. inline void FW_CPart::PrivSetLastActiveFrame(FW_CFrame* lastActiveFrame)
  526. {
  527.     // this is the frame which takes the selection focus when the part is active
  528.     // (it is not set to NULL when the part becomes inactive)
  529.     fLastActiveFrame = lastActiveFrame;
  530. }
  531.  
  532. //---------------------------------------------------------------------------------------
  533. //    FW_CPart::GetPartKind
  534. //---------------------------------------------------------------------------------------
  535. inline FW_CKind* FW_CPart::GetPartKind(Environment*) const
  536. {
  537.     return fPartKind;
  538. }
  539.  
  540. //---------------------------------------------------------------------------------------
  541. //    FW_CPart::GetPreferredKind
  542. //---------------------------------------------------------------------------------------
  543. inline FW_CKind* FW_CPart::GetPreferredKind(Environment*) const
  544. {
  545.     return fPreferredKind;
  546. }
  547.  
  548. //---------------------------------------------------------------------------------------
  549. //    FW_CPart::PrivNeedPrepping
  550. //---------------------------------------------------------------------------------------
  551. inline void FW_CPart::PrivNeedPrepping(Environment*, FW_Boolean state)
  552. {
  553.     fNeedPrepping = state;
  554. }
  555.  
  556. //----------------------------------------------------------------------------------------
  557. //    FW_CPart::RegisterPresentation    
  558. //----------------------------------------------------------------------------------------
  559. inline FW_CPresentation* FW_CPart::RegisterPresentation(Environment *ev, 
  560.                                                         ODType presentationType,
  561.                                                         FW_Boolean defaultPresentation,
  562.                                                         FW_CSelection* selection)
  563. {
  564.     return RegisterPresentation(ev, presentationType, defaultPresentation, FW_kNoViewID, FW_kNoViewID, selection);
  565. }
  566.  
  567. //----------------------------------------------------------------------------------------
  568. //    FW_CPart::GetPartWindowFrame
  569. //----------------------------------------------------------------------------------------
  570. inline FW_CFrame* FW_CPart::GetPartWindowFrame(Environment*) const
  571. {
  572.     return fPartWindowFrame;
  573. }
  574.  
  575. #endif
  576.  
  577.  
  578.  
  579.